home *** CD-ROM | disk | FTP | other *** search
/ Directorty Opus 5 - Magellan 2 / Opus 5 - Magellan 2.iso / Extras / player3_0opus5 / arexx / PlayCDDA_YACDP.dopus5 < prev    next >
Text File  |  1995-11-10  |  16KB  |  454 lines

  1. /* Programm: PlayCDDA_YACDP.dopus5 [10-November-1995]
  2. ** $VER: PlayCDDA_YACDP.dopus5 2.4 (10-Nov-1995)
  3. ** 
  4. ** Needed: Directory Opus V5.11 (© by Jonathan Potter & GPSoftware)
  5. **         YACDP V1.2 or newer (© by Frank Würkner)
  6. **
  7. **           SCSI2-CDROM required !
  8. **
  9. **           for save AIFF & 8SVX (YACDP V1.2) only Toshiba & Sony
  10. **           CDDA V1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de)
  11. **           for save ADPCM3 (only Toshiba CDROM):
  12. **           CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de)
  13. **
  14. ** Copyright © 1995 Eckhard Ludwig (EMail: Eckhard@top.east.de)
  15. ** PlayCDDA_YACDP.dopus5 is freeware. It may be distributed freely.
  16. **
  17. ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to
  18. ** RAW, IFF 8SVX, AIFF & ADPCM3.
  19. **
  20. ** Create new button (CDDA YACDP), Call as:
  21. ** ----------------------------------------------------------------------
  22. ** ARexx    DOpus5:ARexx/PlayCDDA_YACDP.dopus5 {Qp}
  23. ** ----------------------------------------------------------------------
  24. ** Set all attribut off.
  25. */
  26.  
  27. /*--------S E T T I N G S : --------------------------------------------*/
  28. /* If the file PlayCDDA_YACDP.PREFS exists, that one will override the  */
  29. /* settings here ...                                                    */
  30.  
  31. /* Path to YACDP (© 1994-1995 by Frank Würkner)
  32.    (Run needed L:WBStart-Handler & C:WBStarter!) */
  33. CDPlay = "WORK:YACDP/YACDP"
  34. YACDPVER="1.2"      /* Version of YACDP, 1.2 or newer */
  35.  
  36. /* Path to CDDA V1.12 */
  37. CDSave = "C:CDDA" /* only for save AIFF */
  38. /* Path to CDRipper  */
  39. CDRip = "C:CDRipper" /* only for save ADPCM3 */
  40.  
  41. /*-Volume Settings------------------------------------------------------*/
  42.  
  43. CDROMVOLUME=255 /* 1 to 255 (For play via CDROM)       */
  44. AMIGAVOLUME=65  /* 1 to 65  (For play via Amigaaudio)  */
  45.                 /* 0 = no volumesetting & no balancesetting  */
  46. PLAYVIASCSI=0   /* 0=off (Play via CDROM) 1=on (Play via SCSI/Amigaaudio)*/
  47.  
  48. /*--end of settings------------------------------------------------------*/
  49.  
  50.  
  51. if ~show('l','rexxsupport.library') then
  52.     call addlib('rexxsupport.library',0,-30,0)
  53. if ~openport('cdda-handler') then exit
  54.  
  55. if open(1,'env:PlayCDDA_YACDP.prefs','R') then do
  56.    do i=1 to 8
  57.     prefs.i = readln(1)
  58.         end
  59.    if prefs.2 ~="" then CDPLAY=prefs.2
  60.    if prefs.3 ~="" then CDSave=prefs.3
  61.    if prefs.4 ~="" then CDRip =prefs.4
  62.    if prefs.5 ~="" then CDROMVOLUME=prefs.5
  63.    if prefs.6 ~="" then AMIGAVOLUME=prefs.6
  64.    if prefs.7 ~="" then PLAYVIASCSI=prefs.7
  65.    if prefs.8 ~="" then YACDPVER=prefs.8
  66. drop prefs.
  67. end
  68. call close(1)
  69.  
  70. /* init locale */
  71. if ~show(l,'locale.library') then
  72.         call addlib('locale.library',0,-30)
  73. if show(l,'locale.library') then
  74.         catalog=opencatalog('PlayCDDA_YACDP.catalog','deutsch',0)
  75.  
  76.  
  77. parse arg portname
  78. if portname='' then portname='DOPUS.1'
  79. address value portname
  80.  
  81. signal on syntax
  82. options results
  83. options failat 20
  84. lf='0a'x
  85.  
  86. if ~show('P','YACDP') then do
  87.    if ~exists(CDPlay) then do
  88.       dopus front
  89.       dopus request '"'getcatstr(0,'Fehler:'lf'YACDP nicht gefunden (Pfad: %s ?).'lf'Setze Pfad oder starte YACDP >= V1.2 zuerst !',CDPlay)'"' getcatstr(1,'Beenden')
  90.       Exit
  91.       end
  92.    if ~exists("C:WBStarter") then do
  93.       dopus front
  94.       dopus request '"'getcatstr(2,'Fehler:'lf'  C:WBStarter nicht gefunden. Starte YACDP >= V1.2 zuerst !')'"' getcatstr(1,'Beenden')
  95.       Exit
  96.       end
  97.    address command "C:WBStarter "||CDPlay
  98.    address command 'waitforport YACDP'
  99. end
  100.     
  101. address value portname
  102. lister new
  103. handle=result
  104.  
  105. do forever   /* Schleife bei CD-Wechsel */
  106. address 'YACDP'   
  107. 'HIDE'
  108. 'GETVAR STATUS'
  109. if (STATUS < 3) then call Meldung1
  110. 'STOP'
  111. 'GETVAR CDNAME'
  112. 'GETVAR BY'
  113. 'GETVAR MAXTRACK'
  114. if CDNAME="-" then CDNAME=getcatstr(3,'Audio-CD nicht katalogisiert')
  115.  
  116. address value portname
  117. lister set handle title CDNAME||"    "||BY
  118. lister set handle sort name
  119. lister set handle busy on
  120. lister set handle progress MAXTRACK getcatstr(4,'Erstelle Titelliste ...')
  121. lister refresh handle full  
  122.  
  123. do i=1 to MAXTRACK
  124.    lister query handle abort
  125.    if result then leave
  126.    lister set handle progress count i
  127.    lister set handle progress name getcatstr(5,'Titel')' 'i
  128.    address 'YACDP'
  129.    'GETVAR STATUS'
  130.    if (STATUS < 3) then leave
  131.    'GETVAR SONGNAME NUM='i
  132.    'GETVAR TRACKLEN NUM='i' T2 MODE=1' 
  133.    'GETVAR TRACKLEN NUM='i
  134.    'GETVAR TRACKSTART NUM='i
  135.    SONGNAME=TRANSLATE(SONGNAME,"'",'22'x) /* STRIP "  */
  136.    j=right(i,2)
  137.    Startblock=right(TRACKSTART,6)
  138.    Endblock=right(TRACKSTART+TRACKLEN-1,6)
  139.    address value portname   
  140.    if SONGNAME="-" then SONGNAME='Track  'j'   '
  141.    lister add handle '"'j" "SONGNAME'" "'TRACKLEN*2352'" -1 0 r '"* "T2'  'Startblock" - "Endblock''
  142.    lister set handle display name size comment
  143.    lister refresh handle full
  144. end
  145.  
  146. address 'YACDP'
  147. 'GETVAR STATUS'
  148. if (STATUS < 3) then do
  149.     address value portname
  150.     lister set handle busy off
  151.     lister clear handle
  152.     lister refresh handle full
  153.     iterate
  154.     end
  155. 'GETVAR CDLEN'
  156. cdid=CDLEN
  157.  
  158. address value portname
  159. lister set handle busy off
  160. lister set handle handler 'cdda-handler' 'quotes'
  161.  
  162. /* install traps */
  163. dopus addtrap copy 'cdda-handler'
  164. dopus addtrap move 'cdda-handler'
  165. dopus addtrap copyas 'cdda-handler'
  166. dopus addtrap moveas 'cdda-handler'
  167. dopus addtrap delete 'cdda-handler'
  168. dopus addtrap rename 'cdda-handler'
  169. dopus addtrap devicelist 'cdda-handler'
  170. dopus addtrap parent 'cdda-handler'
  171. dopus addtrap show 'cdda-handler'
  172. dopus addtrap play 'cdda-handler'
  173. dopus addtrap protect 'cdda-handler'
  174. dopus addtrap datestamp 'cdda-handler'
  175. dopus addtrap comment 'cdda-handler'
  176. dopus addtrap makedir 'cdda-handler'
  177.  
  178. do forever
  179.   if waitpkt('cdda-handler') then do
  180.    packet=getpkt('cdda-handler')
  181.    if packet='00000000'x then iterate
  182.    event=getarg(packet,0)
  183.    handle=getarg(packet,1)
  184.    titel=getarg(packet,2)
  185.    user=getarg(packet,3)
  186.    pathstr=getarg(packet,4)
  187.    if event="Parent" then leave
  188.    if event="parent" then leave
  189.    if event="inactive" then call Ende
  190.    address 'YACDP'
  191.    'GETVAR STATUS'
  192.    if (STATUS < 3) then leave
  193.    'GETVAR CDLEN'
  194.    if CDLEN~=cdid then leave
  195.    T_FLAG=0
  196.     select
  197.       when event="doubleclick" then call Player
  198.       when event="Play" then call SelPlay
  199.       when event="path" then call SelPlay
  200.       when event="Show" then call CDTest
  201.       when event="Copy" then call SaveCD
  202.       when event="Move" then call SaveCD
  203.       when event="CopyAs" then call SaveCDAs
  204.       when event="MoveAs" then call SaveCDAs
  205.       when event="MakeDir" then iterate
  206.       when event="dropfrom" then call SaveCD
  207.       when event="drop" then iterate
  208.       otherwise call Productinfo
  209.     end
  210.    reply(packet,10)
  211.   end
  212. end
  213. address value portname
  214. lister clear handle
  215. lister refresh handle full
  216. end      /* Ende Schleife bei CD-Wechsel */
  217.  
  218. /*---------------------------------------------------------------------------------*/
  219. SelPlay:
  220. address value portname
  221. lister set handle busy on
  222. lister query handle selfiles stem files.
  223. lister set handle progress files.count getcatstr(6,'Spiele Audio-CD ...')
  224. lister refresh handle full  
  225.  
  226. do i=0 to files.count-1
  227.    lister query handle abort
  228.    if result then leave
  229.    lister set handle progress count i+1
  230.    lister set handle progress name i+1"/"files.count"  "files.i
  231.    titel=files.i
  232.    call Player
  233.    address 'YACDP'
  234.    'WAIT ' TRACKSTART+TRACKLEN 'FLAGS='2+128+8192+16384
  235.    'STOP'
  236.    address value portname
  237.    lister select handle '"'files.i'"' off
  238.    lister refresh handle full
  239. end
  240.  
  241. lister set handle busy off
  242. return
  243.  
  244. /*---------------------------------------------------------------------------------*/
  245. Player:
  246. address 'YACDP'
  247. 'STOP'
  248. if CDROMVOLUME>0 then 'PUTVAR CDROMVOL VALUE='CDROMVOLUME
  249. if AMIGAVOLUME>0 then 'PUTVAR AMIVOL VALUE='AMIGAVOLUME
  250. if CDROMVOLUME>0 then'PUTVAR CDROMBAL VALUE='0
  251. if AMIGAVOLUME>0 then 'PUTVAR AMIBAL VALUE='0
  252. 'PUTVAR VIASCSI VALUE='PLAYVIASCSI
  253. if PLAYVIASCSI=1 then 'PUTVAR LOWPASSFILTER VALUE='0
  254. 'GETVAR TRACKSTART NUM='left(titel,2)
  255. 'GETVAR TRACKLEN NUM='left(titel,2)
  256. 'PLAYBLOCK ' TRACKSTART
  257. return
  258.  
  259. /*---------------------------------------------------------------------------------*/
  260. CDTest:
  261. address 'YACDP'
  262. 'STOP'
  263. 'REQUESTER DUMMY 'getcatstr(8,'"Audio-CD anspielen:"') getcatstr(7,'"Die Titel anspielen für wie lang ?"') getcatstr(9,'"15s|30s|15s ab 0:30|Abbruch"')
  264. if DUMMY=0 then return
  265. if DUMMY=2 then sec=30
  266.    else sec=15
  267. address value portname
  268. lister set handle busy on
  269. lister query handle selfiles stem files.
  270. lister set handle progress files.count getcatstr(10,'Spiele Titel kurz an ...')
  271. lister refresh handle full  
  272.  
  273. do i=0 to files.count-1
  274.    lister query handle abort
  275.    if result then leave
  276.    lister set handle progress count i+1
  277.    lister set handle progress name i+1"/"files.count"  "files.i
  278.    titel=files.i
  279.    call Player
  280.    address 'YACDP'
  281.    if DUMMY=3 then do
  282.       'STOP'
  283.       'PLAYBLOCK ' TRACKSTART+75*30
  284.       'WAIT ' TRACKSTART+75*45 'FLAGS='2+128+8192+16384
  285.       end
  286.       else 'WAIT ' TRACKSTART+75*sec 'FLAGS='2+128+8192+16384
  287.    'STOP'
  288.    address value portname
  289.    lister select handle '"'files.i'"' 0
  290.    lister refresh handle full
  291. end
  292.  
  293. lister set handle busy off
  294. return
  295. /*---------------------------------------------------------------------------------*/
  296. SaveCDAs:
  297. T_FLAG=1
  298. SaveCD:
  299. address 'YACDP'
  300. 'STOP'
  301. 'GETVAR DEVICE'
  302. 'GETVAR UNIT'
  303. 'GETVAR VENDORID'
  304. if YACDPVER="1.2" then do
  305.     if VENDORID="TOSHIBA" then 'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(29,'"AIFF|8SVX|MONO|ADPCM3|Abbruch"')
  306.        else 'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(30,'"AIFF|8SVX|MONO|Abbruch"')
  307. end
  308. else do
  309.     if VENDORID="TOSHIBA" then 'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(13,'"AIFF|8SVX|MONO|ADPCM3|RAW|Abbruch"')
  310.        else do 
  311.        'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(28,'"AIFF|8SVX|MONO|RAW|Abbruch"')
  312.        if DUMMY=4 then DUMMY=5
  313.        end
  314. end
  315.  
  316. if DUMMY=0 then return
  317. if DUMMY=1 then FT=".aiff"
  318. if DUMMY=5 then FT=".cdr"
  319. if DUMMY=2 then FT=".8svx"
  320. if DUMMY=3 then FT=".mono"
  321. if DUMMY=4 then do
  322.     if ~exists(CDRip) then do
  323.        'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(15,'"Der externe ADPCM-Saver CDRipper wurde nicht gefunden (Pfad %s ?)."',CDRip) getcatstr(16,'"Zurück"')
  324.        return
  325.            end
  326.     else FT=".adpcm3"
  327. end
  328. if DUMMY=1 | (DUMMY=2 & YACDPVER="1.2") | (DUMMY=3 & YACDPVER="1.2") then do
  329.     if ~exists(CDSave) then do
  330.        'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(17,'"Der externe Saver CDDA V1.12 wurde nicht gefunden (Pfad %s ?)."',CDSave) getcatstr(16,'"Zurück"')
  331.        return
  332.            end
  333.     else do
  334.       call open('file','ENV:CDDA_DEVICE',W)
  335.       call writech('file',DEVICE)
  336.       call close ('file')
  337.       call open('file','ENV:CDDA_UNIT',W)
  338.       call writech('file',UNIT)
  339.       call close ('file')
  340.     end
  341. end
  342. address value portname
  343. lister set handle busy on
  344. lister set user busy on
  345. if event='dropfrom' then do
  346.    files.count=1
  347.    LNG=POS('22'x,titel,2)-1
  348.    titel=left(titel,LNG)
  349.    files.0=right(titel,LNG-1)
  350.    end
  351.    else lister query handle selfiles stem files.
  352. lister set handle progress files.count getcatstr(18,'Speichere Audiodaten ...')
  353. lister refresh handle full  
  354. lister query user path
  355. Zielpfad=result
  356. do i=0 to files.count-1
  357.    titel=strip(left(substr(files.i,4),24))
  358.    lister set handle progress count i+1
  359.    lister set handle progress name titel||FT
  360.    lister query handle abort
  361.    if result then leave
  362.    if T_FLAG=1 then do
  363.     command beep
  364.     dopus getstring getcatstr(31,'"Bitte neuen Namen eingeben"') 24 '"'titel'"' getcatstr(32,'OK|Abbruch') 
  365.     if DOPUSRC=0 then leave
  366.     ttitel=result
  367.     if ttitel~="RESULT" then titel=ttitel
  368.         lister set handle progress name titel||FT
  369.     end 
  370.    address 'YACDP'
  371.    'GETVAR TRACKSTART NUM='left(files.i,2)
  372.    'GETVAR TRACKLEN NUM='left(files.i,2)
  373.    if DUMMY=4 then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit
  374.    if DUMMY=1 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE"
  375.    if YACDPVER ="1.2" then do
  376.       if DUMMY=2 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX"
  377.       if DUMMY=3 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE 8SVX MONO"
  378.       end
  379.    else do
  380.       if DUMMY=5 then "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="1 "TYPE="1
  381.       if DUMMY=2 then "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="2 "TYPE="2
  382.       if DUMMY=3 then "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="3 "TYPE="3
  383.       end
  384.    address command "FILENOTE "||'"'Zielpfad||titel||FT'"'||" "||'"'CDNAME||"    "||BY'"'
  385.    address value portname
  386.    lister select handle '"'files.i'"' off
  387.    lister refresh handle full
  388. end
  389.  
  390. lister set handle busy off
  391. lister set user busy off
  392. lister read user Zielpfad force
  393. lister refresh user full
  394. return
  395.  
  396. /*---------------------------------------------------------------------------------*/
  397. Productinfo:
  398. address 'YACDP'
  399. do forever
  400.  'REQUESTER DUMMY 'getcatstr(19,'"Über PlayCDDA_YACDP.dopus5 V2.4"') getcatstr(20,'"Copyright ©1995 Eckhard Ludwig.*nFrei verteilbare copyrighted Software."') getcatstr(21,'"Beenden|Über CDROM|Hilfe|Ok"')
  401.  if DUMMY=0 then return
  402.  if DUMMY=1 then call Ende
  403.  if DUMMY=2 then do
  404.    'GETVAR DEVICE'
  405.    'GETVAR UNIT'
  406.    'GETVAR BOARD'
  407.    'GETVAR PRODUCT'
  408.    'GETVAR REVISION'
  409.    'GETVAR VENDORID'
  410.    'REQUESTER DUMMY "Device='DEVICE' Board='BOARD' Unit='UNIT'" "'VENDORID' 'PRODUCT'  Rev.'REVISION'" 'getcatstr(24,'"Zurück"')
  411.    end
  412.  else 'REQUESTER DUMMY 'getcatstr(22,'"PlayCDDA_YACDP.dopus5 Hilfe"') getcatstr(23,'"Parent: CD neu einlesen*nDoppelklick: Spielen ab geklickten Titel*nAbspielen: Spiele alle selektierten Titel*nAnzeigen: Spiele alle selektierten Titel kurz an*nKopieren: Selektierte Titel speichern"') getcatstr(24,'"Zurück"')
  413. end
  414. /*---------------------------------------------------------------------------------*/
  415. Meldung1:
  416. do forever
  417.   if (STATUS = 0) then leave
  418.  'REQUESTER DUMMY 'getcatstr(25,'"PlayCDDA_YACDP.dopus5   Fehler"') getcatstr(26,'"Bitte eine Audio-CD einlegen !"') getcatstr(27,'"Beenden|Ok"')
  419.   if DUMMY=1 then leave
  420.   'WAIT 0 321'
  421.   address value portname
  422.   lister query handle busy
  423.   if RC>0 then leave
  424.   address 'YACDP'
  425.   'GETVAR STATUS'
  426.   if STATUS>2 then return
  427. end
  428. /*---------------------------------------------------------------------------------*/
  429. Ende:
  430. address value portname
  431. lister close handle
  432. dopus remtrap '*' 'cdda-handler'
  433. call closeport('cdda-handler')
  434. address 'YACDP'
  435. 'GETVAR STATUS'
  436. if (STATUS>2) then EJECT
  437. QUIT
  438. exit
  439. /*---------------------------------------------------------------------------------*/
  440. getcatstr:
  441.    parse arg msgno,msgstring,insert.1,insert.2
  442.    if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring)
  443.    j=0
  444.    do while pos('%s',msgstring)>0
  445.       parse var msgstring fore '%s' aft
  446.       j=j+1
  447.       msgstring=fore||insert.j||aft
  448.       end
  449.    return msgstring
  450. /*---------------------------------------------------------------------------------*/
  451. syntax:
  452. SAY "error at line" SIGL ":" RC
  453. Return
  454.